#pragma once

#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <unistd.h>
#include <functional>

typedef std::function<void()> func;

std::vector<func> callbacks; // 存放若干个回调
std::unordered_map<int, std::string> desc; // 查看有多少方法用的

void readMySQL()
{
    std::cout << "sub process[" << getpid() << " ] 执行访问数据库的任务\n" << std::endl;
}

void execuleUrl()
{
    std::cout << "sub process[" << getpid() << " ] 执行url解析\n" << std::endl;
}

void cal()
{
    std::cout << "sub process[" << getpid() << " ] 执行加密任务\n" << std::endl;
}

void save()
{
    std::cout << "sub process[" << getpid() << " ] 执行数据持久化任务\n" << std::endl;
}

void load() // 操作表，先插入描述再插入方法，下标就对齐了
{
    desc.insert({ callbacks.size(), "readMySQL: 读取数据库" });
    callbacks.push_back(readMySQL);

    desc.insert({ callbacks.size(), "execuleUrl: 进行url解析" });
    callbacks.push_back(execuleUrl);

    desc.insert({ callbacks.size(), "cal: 进行加密计算" });
    callbacks.push_back(cal);

    desc.insert({ callbacks.size(), "save: 进行数据的文件保存" });
    callbacks.push_back(save);
}

void showHandler() // 查看有多少方法
{
    for (const auto& iter : desc)
    {
        std::cout << iter.first << "\t" << iter.second << std::endl; // \t制表符
    }
}

int handlerSize() // 直接返回有多少个任务的方法
{
    return callbacks.size();
}